package com.jyw.business.ins.mapper;

import java.time.LocalDateTime;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jyw.business.ast.domain.dto.web.InsRecordAstPageDto;
import com.jyw.business.ast.domain.dto.web.InsTaskAstPageDto;
import com.jyw.business.ast.domain.dto.wechat.WechatInsRecordAstPageDto;
import com.jyw.business.ast.domain.dto.wechat.WechatInsTaskAstPageDto;
import com.jyw.business.ast.domain.vo.web.InsRecordAstPageVo;
import com.jyw.business.ast.domain.vo.web.InsTaskAstPageVo;
import com.jyw.business.ins.domain.InsTask;
import com.jyw.business.ins.domain.dto.web.RecordUnitPageDto;
import com.jyw.business.ins.domain.dto.web.TaskUnitPageDto;
import com.jyw.business.ins.domain.dto.wechat.WechatRecordUnitPageDto;
import com.jyw.business.ins.domain.dto.wechat.WechatTaskUnitPageDto;
import com.jyw.business.ins.domain.vo.web.HomeMineRectifyVO;
import com.jyw.business.ins.domain.vo.web.HomeMineTaskVO;
import com.jyw.business.ins.domain.vo.web.RecordUnitPageVo;
import com.jyw.business.ins.domain.vo.web.TaskUnitPageVo;
import com.jyw.system.domain.dto.BaseTimeDto;
import org.apache.ibatis.annotations.Param;

/**
 * 巡检任务Mapper接口
 * 
 * @author system
 * @date 2023-10-07
 */
public interface InsTaskMapper extends BaseMapper<InsTask>
{
    /**
     * 查询巡检任务
     * 
     * @param id 巡检任务主键
     * @return 巡检任务
     */
    public InsTask selectInsTaskById(Long id);

    /**
     * 查询巡检任务列表
     * 
     * @param insTask 巡检任务
     * @return 巡检任务集合
     */
    public List<InsTask> selectInsTaskList(InsTask insTask);

    /**
     * 新增巡检任务
     * 
     * @param insTask 巡检任务
     * @return 结果
     */
    public int insertInsTask(InsTask insTask);

    /**
     * 修改巡检任务
     * 
     * @param insTask 巡检任务
     * @return 结果
     */
    int updateInsTask(InsTask insTask);

    /**
     * 删除巡检任务
     * 
     * @param id 巡检任务主键
     * @return 结果
     */
    public int deleteInsTaskById(Long id);

    /**
     * 批量删除巡检任务
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteInsTaskByIds(Long[] ids);

    /**
     * 巡检记录资产查询
     * @param dto
     * @return
     */
    List<InsRecordAstPageVo> recordAstList(@Param("data") InsRecordAstPageDto dto);

    /**
     * 巡检记录单元查询
     * @param dto
     * @return
     */
    List<RecordUnitPageVo> recordUnitList(@Param("data") RecordUnitPageDto dto);

    /**
     * 小程序-巡检记录资产查询
     * @param dto
     * @return
     */
    List<InsRecordAstPageVo> wxRecordAstList(@Param("data")WechatInsRecordAstPageDto dto);

    /**
     * 小程序-巡检记录单元查询
     * @param dto
     * @return
     */
    List<RecordUnitPageVo> wxRecordUnitList(@Param("data")WechatRecordUnitPageDto dto);

    /**
     * 巡检任务资产查询
     * @param dto
     * @return
     */
    List<InsTaskAstPageVo> taskAstList(@Param("data")InsTaskAstPageDto dto);

    /**
     * 巡检任务单元查询
     * @param dto
     * @return
     */
    List<TaskUnitPageVo> taskUnitList(@Param("data") TaskUnitPageDto dto);

    /**
     * 小程序-任务-资产查询
     * @param dto
     * @return
     */
    List<InsTaskAstPageVo> wxTaskAstList(@Param("data")WechatInsTaskAstPageDto dto);

    /**
     * 小程序-任务-单元查询
     * @param dto
     * @return
     */
    List<TaskUnitPageVo> wxTaskUnitList(@Param("data")WechatTaskUnitPageDto dto);

    /**
     * 首页-我的巡检
     * @param baseTimeDto
     * @param userId
     * @return
     */
    List<HomeMineTaskVO> mineTask(@Param("date") BaseTimeDto baseTimeDto, @Param("userId") Long userId);

    /**
     * 首页-我的整改
     * @param baseTimeDto
     * @param userId
     * @return
     */
    List<HomeMineRectifyVO> mineRectify(@Param("date") BaseTimeDto baseTimeDto, @Param("userId") Long userId);

    /**
     * 首页 待巡检
     * @param userId
     */
    Integer todoTask(@Param("userId") Long userId);

    /**
     * 首页 待整改
     * @param userId
     */
    Integer todoRectify(@Param("userId")Long userId);

    /**
     * 删除今天已经生成的任务 重新生成（避免规则改变任务时间不一致）
     *
     * @param planId
     * @param currentTime
     */
    void deleteCreateTask(@Param("planId")Long planId, @Param("currentTime")LocalDateTime currentTime);
}
